package api_type

type WfapiDescribe struct {
	Links               Links            `json:"_links"`
	ID                  string           `json:"id"`
	Name                string           `json:"name"`
	ExecNode            string           `json:"execNode"`
	Status              string           `json:"status"`
	StartTimeMillis     int64            `json:"startTimeMillis"`
	DurationMillis      int              `json:"durationMillis"`
	PauseDurationMillis int              `json:"pauseDurationMillis"`
	StageFlowNodes      []StageFlowNodes `json:"stageFlowNodes"`
}
type Self struct {
	Href string `json:"href"`
}

type Log struct {
	Href string `json:"href"`
}
type Console struct {
	Href string `json:"href"`
}
type Links struct {
	Self    Self    `json:"self"`
	Log     Log     `json:"log"`
	Console Console `json:"console"`
}
type StageFlowNodes struct {
	Links               Links    `json:"_links"`
	ID                  string   `json:"id"`
	Name                string   `json:"name"`
	ExecNode            string   `json:"execNode"`
	Status              string   `json:"status"`
	StartTimeMillis     int64    `json:"startTimeMillis"`
	DurationMillis      int64    `json:"durationMillis"`
	PauseDurationMillis int      `json:"pauseDurationMillis"`
	ParentNodes         []string `json:"parentNodes"`
}

type WfapiLog struct {
	NodeID     string `json:"nodeId"`
	NodeStatus string `json:"nodeStatus"`
	Length     int    `json:"length"`
	HasMore    bool   `json:"hasMore"`
	Text       string `json:"text"`
	ConsoleURL string `json:"consoleUrl"`
}

// testReport
type TestReport struct {
	Class       string        `json:"_class"`
	TestActions []interface{} `json:"testActions"`
	Duration    float64       `json:"duration"`
	Empty       bool          `json:"empty"`
	FailCount   int           `json:"failCount"`
	PassCount   int           `json:"passCount"`
	SkipCount   int           `json:"skipCount"`
	Suites      []Suites      `json:"suites"`
}
type Cases struct {
	TestActions     []interface{} `json:"testActions"`
	Age             int           `json:"age"`
	ClassName       string        `json:"className"`
	Duration        float64       `json:"duration"`
	ErrorDetails    interface{}   `json:"errorDetails"`
	ErrorStackTrace interface{}   `json:"errorStackTrace"`
	FailedSince     int           `json:"failedSince"`
	Name            string        `json:"name"`
	Skipped         bool          `json:"skipped"`
	SkippedMessage  interface{}   `json:"skippedMessage"`
	Status          string        `json:"status"`
	Stderr          interface{}   `json:"stderr"`
	Stdout          interface{}   `json:"stdout"`
}
type Suites struct {
	Cases               []Cases     `json:"cases"`
	Duration            float64     `json:"duration"`
	EnclosingBlockNames []string    `json:"enclosingBlockNames"`
	EnclosingBlocks     []string    `json:"enclosingBlocks"`
	ID                  interface{} `json:"id"`
	Name                string      `json:"name"`
	NodeID              string      `json:"nodeId"`
	Stderr              interface{} `json:"stderr"`
	Stdout              interface{} `json:"stdout"`
	Timestamp           interface{} `json:"timestamp"`
}

// 构建产物
type Atifacts struct {
	Downloadable bool   `json:"downloadable"`
	ID           string `json:"id"`
	Name         string `json:"name"`
	Path         string `json:"path"`
	Size         int64  `json:"size"`
	URL          string `json:"url"`
}

type PipelineRunStage struct {
	Class string `json:"_class"`
	Links struct {
		Self struct {
			Class string `json:"_class"`
			Href  string `json:"href"`
		} `json:"self"`
		Actions struct {
			Class string `json:"_class"`
			Href  string `json:"href"`
		} `json:"actions"`
		Steps struct {
			Class string `json:"_class"`
			Href  string `json:"href"`
		} `json:"steps"`
	} `json:"_links"`
	Actions            []interface{} `json:"actions"`
	DisplayDescription interface{}   `json:"displayDescription"`
	DisplayName        string        `json:"displayName"`
	DurationInMillis   int           `json:"durationInMillis"`
	ID                 string        `json:"id"`
	Input              interface{}   `json:"input"`
	Result             string        `json:"result"`
	StartTime          string        `json:"startTime"`
	State              string        `json:"state"`
	Type               string        `json:"type"`
	CauseOfBlockage    interface{}   `json:"causeOfBlockage"`
	Edges              []struct {
		Class string `json:"_class"`
		ID    string `json:"id"`
		Type  string `json:"type"`
	} `json:"edges"`
	FirstParent string `json:"firstParent"`
	Restartable bool   `json:"restartable"`
}

type PipelineRun struct {
	Class string `json:"_class"`
	Links struct {
		Parent struct {
			Class string `json:"_class"`
			Href  string `json:"href"`
		} `json:"parent"`
		Tests struct {
			Class string `json:"_class"`
			Href  string `json:"href"`
		} `json:"tests"`
		Log struct {
			Class string `json:"_class"`
			Href  string `json:"href"`
		} `json:"log"`
		Self struct {
			Class string `json:"_class"`
			Href  string `json:"href"`
		} `json:"self"`
		BlueTestSummary struct {
			Class string `json:"_class"`
			Href  string `json:"href"`
		} `json:"blueTestSummary"`
		Actions struct {
			Class string `json:"_class"`
			Href  string `json:"href"`
		} `json:"actions"`
		ChangeSet struct {
			Class string `json:"_class"`
			Href  string `json:"href"`
		} `json:"changeSet"`
		Artifacts struct {
			Class string `json:"_class"`
			Href  string `json:"href"`
		} `json:"artifacts"`
	} `json:"_links"`
	Actions          []interface{} `json:"actions"`
	ArtifactsZipFile interface{}   `json:"artifactsZipFile"`
	CauseOfBlockage  string        `json:"causeOfBlockage"`
	Causes           []struct {
		Class            string `json:"_class"`
		ShortDescription string `json:"shortDescription"`
		UserID           string `json:"userId"`
		UserName         string `json:"userName"`
	} `json:"causes"`
	ChangeSet                 []interface{} `json:"changeSet"`
	Description               interface{}   `json:"description"`
	DurationInMillis          interface{}   `json:"durationInMillis"`
	EnQueueTime               interface{}   `json:"enQueueTime"`
	EndTime                   interface{}   `json:"endTime"`
	EstimatedDurationInMillis interface{}   `json:"estimatedDurationInMillis"`
	ID                        string        `json:"id"`
	Name                      interface{}   `json:"name"`
	Organization              string        `json:"organization"`
	Pipeline                  string        `json:"pipeline"`
	Replayable                bool          `json:"replayable"`
	Result                    string        `json:"result"`
	RunSummary                interface{}   `json:"runSummary"`
	StartTime                 interface{}   `json:"startTime"`
	State                     string        `json:"state"`
	Type                      string        `json:"type"`
	QueueID                   string        `json:"queueId"`
}

type InputAction struct {
	ID          string `json:"id"`
	ProceedText string `json:"proceedText"`
	Message     string `json:"message"`
	Inputs      []struct {
		Type        string `json:"type"`
		Name        string `json:"name"`
		Description string `json:"description"`
		Definition  struct {
			DefaultVal string   `json:"defaultVal"`
			Choices    []string `json:"choices"`
		} `json:"definition"`
	} `json:"inputs"`
	ProceedURL          string `json:"proceedUrl"`
	AbortURL            string `json:"abortUrl"`
	RedirectApprovalURL string `json:"redirectApprovalUrl"`
}
